|

VMLAB
การสร้างโปรเจคใหม่
Project->
New project
Step 1 สร้าง Directory เพื่อเก็บ Project
Step 2 เลือกไมโคร ATmega168
Step 3 คลิกเลือก GNU
C สังเกตด้วยว่า GCC
path อยู่ตรงตำแหน่งที่เก็บ WinAVR-20100110 หรือไม่
ถ้าไม่ให้แก้ไข
Step 4 เลือก Add this เพิ่มไฟล์ภาษา C ใว้ใน Project
คลิก
OK
ตัวอย่างไฟลโปรเจค
; ************************************************************
; PROJECT:
; AUTHOR:
; ************************************************************
; Micro + software running
; ------------------------------------------------------------
.MICRO "ATmega168"
.TOOLCHAIN "GCC"
.GCCPATH "C:\WinAVR-20100110"
.GCCMAKE AUTO
.TARGET "example.hex"
.SOURCE "example.c"
.TRACE
; Activate micro trace
; Following lines are optional; if not included
; exactly these values are taken by default
; ------------------------------------------------------------
.POWER VDD=5 VSS=0 ; Power nodes
.CLOCK 1meg ; Micro
clock
.STORE 250m ; Trace
(micro+signals) storage time
; Micro nodes: RESET, AREF, PB0-PB7, PC0-PC6, PD0-PD7, ACO, TIM1OVF,
ADC6, ADC7
; Define here the hardware around the micro
; ------------------------------------------------------------
เปิดไฟล์โปรแกรม
แล้วแก้ไขให้เหลือเพียง
#include
<avr\io.h>
// Most basic include files
#include <avr\interrupt.h> //
Add the necessary ones
#include
<avr\signal.h>
// here
// Define here the global static variables
int a;
// ***********************************************************
// Main program
//
int main(void) {
a = ......;
while(1)
{
// Infinite loop; define here the
a>>=....;
}
}
แปลโปรแกรม
Project -> Build
กำหนดค่าตัวแปรที่ต้องการดู
Debug -> Watch manager แล้วคลิกเลือกตัวแปร
แล้วปิดหน้าต่าง
แสดงค่าตัวแปร
View -> Watch
Run Prgram ที่ละสเต็ป
Run -> Step into หรือ F7
ให้บันทึกค่า a = ……. ; a>>=……….; กด
F7 แล้ว เปลี่ยนไปอย่างไร
.....................................................
สรุปคำสั่ง a>>=……….; นี้คืออะไร
-------------------------------------------------------------------------------------------------------------------------------
โปรแกรมที่ 2
เขียนโปรแกรมใหม่ ให้ใช้ชื่อว่า ex2.c
#include
<avr\io.h>
// Most basic include files
#include <stdio.h>
#include <util/delay.h>
int a;
// ***********************************************************
// Main program
int main(void) {
DDRD = 0xff; //Port D as output
while(1)
{
// Infinite loop; define here the
a = 1;
for(int i = 0;i<8;i++){
PORTD = a;
_delay_ms(300);
a<<=1;
}
}
}
แก้ไฟล์โปรเจคในบรรทัด .SOURCE “ex2.c”
เพื่อให้ทำงานกับโปรกรมใหม่ ex2.c
แปลโปรแกรม
แสดงค่า I/O Port
View -> I/O Port จะได้หน้าต่าง I/O
Port ให้ติกเลือกแสดงรายละเอียดพอร์ท D
รูปที่ 1
Run Prgram ต่อเนื่องโดยกด F5 แล้วสังเกตค่าที่ Port D
ให้ทำความเข้าใจโปรแกรม
จำลองการทำงานด้วย LED
จาก Ex2.c จะแสดงการทำงาน เหมือนกับต่อ LED ตามรูปที่ 2
รูปที่ 2
ที่ ไฟล์โปรเจคให้เพิมคำสั่งต่อไปนี้
D1 VDD D1_NODE
D2 VDD D2_NODE
D3 VDD D3_NODE
D4 VDD D4_NODE
D5 VDD D5_NODE
D6 VDD D6_NODE
D7 VDD D7_NODE
D8 VDD D8_NODE
R1 D1_NODE PD0 0.62K
R2 D2_NODE PD1 0.62K
R3 D3_NODE PD2 0.62K
R4 D4_NODE PD3 0.62K
R5 D5_NODE PD4 0.62K
R6 D6_NODE PD5 0.62K
R7 D7_NODE PD6 0.62K
R8 D8_NODE PD7 0.62K
แก้ไขไฟล์ e2.c ที่ PORTD = a; เป็น PORTD = ~a;
แปลโปรแกรม
แสดงอุปกรณ์ LED
View -> Control Panel
Run โปรแกรม ตรวจสอบการทำงาน
------------------------------------------------------------------------------------------------------------------------------
โปรแกรมที่ 3 จำลองสวิทช์แบบ LATCHED
เพื่อต่อสวิทช์ K1 เข้ากับ PB0 ให้เพิ่มคำสั่งลงในไฟล์โปรเจคดังนี้
R9 VDD PB0 10K
K1 PB0 VSS LATCHED
แก้ไขโปรแกรมที่ 2 เพื่อให้สามารถควบคุมทิศทางการวิ่งของ LED ได้
โดยมีแนวทางโปรแกรมดังนี้
#include
<avr\io.h>
// Most basic include files
#include <stdio.h>
#include <util/delay.h>
// Define here the global static variables
unsigned int a;
#define SW0_CLOSE (PINB & 0b00000001) == 0
#define SW0_OPEN (PINB & 0b00000001)==1
// ***********************************************************
// Main program
//
int main(void) {
DDRD = 0xff; //Port D as output
DDRB = 0xfe;
while(1)
{
// Infinite loop; define here the
if(SW0_CLOSE)
{
}
else
{
}
}
งานมอบหมาย
1. จงเขียนโปรแกรมภาษา C ของ AVR
เพื่อให้ทำงานได้เหมือนกับวงจรเกทในรูปที่ 3
รูปที่ 3
2. จากวงจรในรูปที่ 4 จงเขียนโปรแกรมภาษา C
เพื่อตรวจสอบว่าสวิทช์ SW1 ถึง SW4 ปิดวงจร (Close
circuit) ถ้าสวิทช์ใดปิดวงจร ให้ LED 7-segment
ติดเป็นเลขนั้น เช่นถ้า SW3 ปิดวงจร LED 7-segment
จะติดเป็นเลข 3 แต่ถ้าไม่มีสวิทช์ใดปิดวงจรเลยให้ LED ติดเฉพาะจุด
(dot) อย่างเดียว
รูปที่ 4
3. ตามรูปที่ 5 จงเขียนโปรแกรมภาษา C เมื่อ SW1
เปิดวงจร (Open) LED 1 ดับ และ PD2 เป็นโลจิก 1 แต่ถ้า SW1
ปิดวงจร (Close) LED1 จะติด และ PD2 เป็นสัญญาณสีเหลี่ยม
(Squarewave) ความถี่ 500 Hz
รูปที่ 5
4. จาก State diagram ของ State Machine
ตามรูปที่ 6 จงเขียนโปรแกรมภาษา C เพื่อควบคุมการทำงาน
กำหนดให้
อินพุท x เป็นสวิทช์ต่ออยู่ที่ PB0
เอาท์พุท y1 y2 เป็น LED ต่อยู่ที่ PD0 และ PD1 ตามลำดับ
รูปที่ 6
5. จงเขียนโปรแกรมภาษา C ควบคุมสัญญาณไฟจราจร
ตามรูปที่ 7
รูปที่ 7
6. จงเขียนโปรแกรมภาษา C ควบคุมเครื่องชงกาแฟอัตโนมัติ
|